<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<script type="text/javascript" src="jquery-1.10.1.min.js"></script>
<body>
<script>
if (navigator.geolocation) {
// getCurrentPosition支持三个参数
// getSuccess是执行成功的回调函数
// getError是失败的回调函数
// getOptions是一个对象,用于设置getCurrentPosition的参数
// 后两个不是必要参数
var getOptions = {
//是否使用高精度设备,如GPS。默认是true
enableHighAccuracy : true,
//超时时间,单位毫秒,默认为0
timeout : 5000,
//使用设置时间内的缓存数据,单位毫秒
//默认为0,即始终请求新数据
//如设为Infinity,则始终使用缓存数据
maximumAge : 0
};
//成功回调
function getSuccess(position) {
alert(position);
// getCurrentPosition执行成功后,会把getSuccess传一个position对象
// position有两个属性,coords和timeStamp
// timeStamp表示地理数据创建的时间??????
// coords是一个对象,包含了地理位置数据
console.info(position.timeStamp);
// 估算的纬度
console.info(position.coords.latitude);
// 估算的经度
console.info(position.coords.longitude);
alert("当前位置:" + position.coords.latitude + ","
+ position.coords.longitude);
getCounty({'latitude':position.coords.latitude, 'longitude':position.coords.longitude});
// 估算的高度 (以米为单位的海拔值)
console.info(position.coords.altitude);
// 所得经度和纬度的估算精度,以米为单位
console.info(position.coords.accuracy);
// 所得高度的估算精度,以米为单位
console.info(position.coords.altitudeAccuracy);
// 宿主设备的当前移动方向,以度为单位,相对于正北方向顺时针方向计算
console.info(position.coords.heading);
// 设备的当前对地速度,以米/秒为单位
console.info(position.coords.speed);
// 除上述结果外,Firefox还提供了另外一个属性address
if (position.address) {
//通过address,可以获得国家、省份、城市
console.info(position.address.country);
console.info(position.address.province);
console.info(position.address.city);
}
}
//获取国家 根据经纬度获取国家
function getCounty(data) {
var url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + data.latitude + "," + data.longitude + "&sensor=false&language=CN";
$.post(url, function(data){
console.info(data);
if(data.status == 'OK') {
var results = data.results;
for (var i=0; i < results[0].address_components.length; i++) {
for (var j=0; j < results[0].address_components[i].types.length; j++) {
if (results[0].address_components[i].types[j] == "country") {
country = results[0].address_components[i];
console.log(country.long_name)
alert(country.long_name)
console.log(country.short_name)
alert(country.short_name)
}
}
}
} else {
alert('定位失败')
}
});
}
//失败回调
function getError(error) {
// 执行失败的回调函数,会接受一个error对象作为参数
// error拥有一个code属性和三个常量属性TIMEOUT、PERMISSION_DENIED、POSITION_UNAVAILABLE
// 执行失败时,code属性会指向三个常量中的一个,从而指明错误原因
alert(error);
switch (error.code) {
case error.TIMEOUT:
alert("超时")
console.info('超时');
break;
case error.PERMISSION_DENIED:
alert("用户拒绝提供地理位置")
console.info('用户拒绝提供地理位置');
break;
case error.POSITION_UNAVAILABLE:
alert("地理位置不可用");
console.info('地理位置不可用');
break;
default:
break;
}
}
navigator.geolocation.getCurrentPosition(getSuccess, getError,
getOptions);
// watchPosition方法一样可以设置三个参数
// 使用方法和getCurrentPosition方法一致,只是执行效果不同。
// getCurrentPosition只执行一次
// watchPosition只要设备位置发生变化,就会执行
var watcher_id = navigator.geolocation.watchPosition(getSuccess,
getError, getOptions);
//clearwatch用于终止watchPosition方法
navigator.geolocation.clearWatch(watcher_id);
}
</script>
</body>
</html>